Computer systems have many protocols for transferring data between components. For example, a mother board of a computer system transfers data between the processor and peripheral components such as modems, memory, and disk drives. A common protocol used in computer systems is peripheral component interconnect (“PCI”), which is a data transfer technique using a parallel bus and common clock and control signals.
Another protocol is called PCI-express (“PCIe”), which is a serial data transfer technique. PCIe has been shown to provide fast, bidirectional data transfer without the need for a common clock on a reduced number of lines. PCIe is generally referred to as a link transaction that uses three layers. The transaction layer accepts and buffers data to create a T-layer packet (“TLP”). The TLP is provided to the data link layer, which provides the mechanisms for reliably exchanging TLPs between components and provides error detection and other functions. The processing in the data link layer is commonly referred to as data link layer processing, and produces a data link layer packet (“DLLP”) that is, for example, a TLP with a packet sequence number prefix and error detection suffix, such as a cyclic redundancy code (“CRC”). The L-layer packet is provided to the physical layer, which frames and de-frames L-layer packets, and optionally provides additional functions, such as coding/decoding and scrambling/descrambling.
Some ICs, such as field-programmable gate arrays (“FPGAs”) can operate as a computer system, with logic, memory, transceivers, and other components incorporated into a single chip. PCIe techniques can be used to transfer data between the components of the system on the chip. Conventional PCIe techniques use a credit-based flow control mechanism to insure packets aren't sent to a component unless that component is likely to be ready to accept them. Unfortunately, if a problem arises in one data flow path, it can affect another data flow path if certain types of components are common to both data flow paths. This is commonly called “congestion collapse”.